package edu.maping.easy.gui;

import java.util.ArrayList;
import java.util.List;

import processing.core.PApplet;

import fisica.FBody;
import fisica.FDistanceJoint;
import fisica.FWorld;

public class ButtonList extends Button {

	List<FBody> buttons = new ArrayList<FBody>();
	List<FDistanceJoint> juntas = new ArrayList<FDistanceJoint>();

	FWorld world = null;

	PApplet applet = null;

	public ButtonList(FWorld world, String name, float x, float y, int width,
			int height, PApplet pApplet) {
		super(name, x, y, width, height, pApplet);
		this.world = world;
		applet = pApplet;
	}

	public void add(Button button) {
		addElement(button);
	}

	public void add(CircleButton button) {
		addElement(button);
	}

	public void add(FBody button) {
		addElement(button);
	}

	@Override
	public void setDrawable(boolean drawable) {
		super.setDrawable(drawable);
		if (buttons != null)
			for (int index = 0; index < buttons.size(); index++) {
				buttons.get(index).setDrawable(drawable);
			}
		if (juntas != null)
			for (int index = 0; index < juntas.size(); index++) {
				juntas.get(index).setDrawable(drawable);
			}
	}

	@Override
	public void setPosition(float x, float y) {
		
		float yy = y;
		if (buttons != null)
			for (int index = 0; index < buttons.size(); index++) {
				// buttons.get(index).setFillColor(-16763310);
				yy += 50;
				buttons.get(index).setPosition(x, yy);
			}
		super.setPosition(x, y);
	}

	public void init() {
		for (int index = 0; index < buttons.size(); index++) {
			// buttons.get(index).setFillColor(-16763310);
			buttons.get(index).setDrawable(true);
		}

		for (int index = 0; index < juntas.size(); index++) {
			// buttons.get(index).setFillColor(-16763310);
			juntas.get(index).setDrawable(true);
		}
	}

	private void addElement(FBody button) {
		FBody last;
		if (buttons.size() > 0) {
			last = buttons.get(buttons.size() - 1);
		} else {
			last = this;
		}

		button.setPosition(last.getX(), last.getY() + 50);
		button.setDamping(1);

		FDistanceJoint junta = new FDistanceJoint(last, button);
		// junta.setDrawable(false);
		juntas.add(junta);

		junta.setFrequency(applet.mouseX);
		junta.setDamping(applet.mouseY);
		junta.setLength(25);

		world.add(junta);

		buttons.add(button);
	}

	public int indexOf(FBody button) {
		return buttons.indexOf(button);
	}

	public FBody getBody(int index) {
		return buttons.get(index);
	}
}
